In modern cryptography, one common methodology used to design strong systems is to base the system on mathematical problems that are considered algorithmically hard to solve. For example, many cryptographic systems are based on factorization or discrete logarithms, both mathematically difficult problems. This approach is very efficient, and was one of the key elements in transforming the art of cryptography into a real science. One aspect leading to the success is that mathematically hard problems have provable levels of security, thus making it possible to mathematically prove certain security features of a cryptographic system.
Even though the security of a cryptographic system can be proven, if the cryptographic system is implemented in software and running on a client application, the cryptographic system may still be vulnerable to reverse engineering attacks. This is particularly true if the cryptographic system is based on well known or commonly used mathematically difficult problems. Accordingly, any improvements or variations to these components can enhance the security afforded by cryptographic security schemes.